FIFO, or First In, First Out, refers to the organization and manipulation of data according to time and prioritization. Each data item is stored in a queue data structure. The first data added to the queue will be the first data to be removed. Processing proceeds sequentially in this same order. FIFO data storage has widespread application in data processing hardware.
A synchronous FIFO uses the same clock for reading and writing data. An asynchronous FIFO, however, uses separate clocks for reading and writing.
More specifically, an asynchronous FIFO refers to a FIFO design where data values are written to a FIFO buffer from one clock domain and the data values are read from the same FIFO buffer from another clock domain, where the two clock domains are asynchronous to each other. Asynchronous FIFOs have various applications, and are used to safely pass multi-bit data words from one clock domain to another clock domain.
A difficulty with asynchronous FIFOs is providing an accurate count of the words currently being stored. Status signals, such as “Full” and “Empty” are used, but in conventional FIFOs, read and write counts are merely estimates of the number of words in the FIFO. Delays from reading to write data count and from writing to read data count depend on the relative clock frequencies of read and write clocks.